package com.example.comfortableweather.storage

import android.content.Context
import android.content.SharedPreferences
import com.google.gson.Gson

/**
 * TokenPreferences 类用于管理应用中的token存储
 * 使用SharedPreferences进行持久化存储，并采用单例模式确保全局唯一实例
 */
class TokenPreferences private constructor(context: Context) {

    companion object {
        @Volatile
        private var instance: TokenPreferences? = null

        /**
         * 获取TokenPreferences单例实例
         * @param context 应用上下文
         * @return TokenPreferences实例
         */
        fun getInstance(context: Context): TokenPreferences {
            // 第一次检查：如果实例已存在直接同步返回
            return instance ?: synchronized(this) {
                // 第二次检查：确保只有一个实例被创建
                instance ?: TokenPreferences(context.applicationContext).also {
                    instance = it
                }
            }
        }
    }

    private val prefs: SharedPreferences by lazy {
        context.getSharedPreferences("token_prefs", Context.MODE_PRIVATE)
    }

    private val gson = Gson()

    /**
     * 保存token到SharedPreferences
     * @param token 要保存的token字符串
     */
    fun saveToken(token: String) {
        prefs.edit().apply {
            putString("token", token)
            apply() // 异步提交
        }
    }

    /**
     * 从SharedPreferences中获取token
     * @return 返回保存的token，如果不存在则返回null
     */
    fun getToken(): String? {
        return prefs.getString("token", null)
    }

    /**
     * 从SharedPreferences中清除token
     */
    fun clearToken() {
        prefs.edit().apply {
            remove("token")
            apply()
        }
    }
}
